在網路上已經有許多針對 Redis PubSub 的功能、優缺點、規格等有非常詳細的解說
但大部分的介紹並不會告訴你在哪些情景下使用,如何權衡優缺點
最近在開發上遇到了 Redis PubSub 的實戰改良場景
雖然我不是主力開發這項問題的人,但稍微有點關係就趁機研究了一下
既然機會難得,於是有了這篇的誕生
本篇中並不會詳細說明 Redis PubSub,如不知道的話可以參考 Redis 的官方文件
一般在開發上很常見到開關按鈕的需求
例如在家中閉關總電源開關,家裡的電器都會停止工作
這個需求做起來其實很簡單,如圖所示,只需要做出兩個 API
一個用於設定狀態,另一個用於取得狀態
不過這個簡易架構會遇到兩個問題
雖然 Redis 有著優越的讀寫性能,但開關狀態實際上很少會更改
這是經典的多讀少寫場景,所以你的效能會全部浪費在重複的讀取開關上
這時會想著,想要減少 Redis 的壓力,這時候增加 local cache 就可以解決
但是這更現實,基本上有流量的伺服器可能是個 cluster
所以做 local cache 會讓你的狀態無法同步,功能產生問題
這時候根據遇到的瓶頸,即可利用 PubSub 來進行處理
不需要在每次需要知道狀態的時候去讀取,反之當狀態被修改的時候,等人家來告訴我
但需要注意的事情是,如果使用 PubSub 的時候是不會儲存資料在 Redis 中的
需要增加預防失敗時的處理機制